package com.setting.service;

import java.util.ArrayList;
import java.util.List;

import javax.transaction.Transactional;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.entity.Sysdic;
import com.interfaces.SysdicDao;
import com.setting.entity.JsonSys;
import com.utils.CglibBeanCopierUtils;
import com.utils.JsonResult;
import com.utils.JsonSysdic;
import com.utils.Utils;


/**
 * @Title: SysdicService.java
 * @Package com.service
 * @author 孙梦楠
 * @date 2017年7月27日 上午8:55:59
 * @version V1.0.0
 */

@Service
public class SysdicService {

	@Autowired
	private SysdicDao sysdicdao;

	private static final Logger log = LoggerFactory.getLogger(SysdicService.class);

	// 展示所有
	@Transactional
	public JsonResult<List<JsonSys>> listjsonsys() {
		List<JsonSys> jsonSyses = new ArrayList<JsonSys>();
		List<Sysdic> list = sysdicdao.listsys();
		for (Sysdic sysdic : list) {
			JsonSys jsonSys = new JsonSys();
			CglibBeanCopierUtils.copyProperties(sysdic, jsonSys);
			jsonSyses.add(jsonSys);
		}
		return new JsonResult<List<JsonSys>>(231, "展示所有", jsonSyses);
	}

	// 新增
	@Transactional
	public JsonResult<Sysdic> addsys(String sysdictype, String sysdicname, String sysdicvalue, String sysdicdisplay,
			String sysdicdisplay_e, String sysdicremake) {
		if (Utils.isNullOrEmpty(sysdictype) || Utils.isNullOrEmpty(sysdicname) || Utils.isNullOrEmpty(sysdicvalue)
				|| Utils.isNullOrEmpty(sysdicdisplay) || Utils.isNullOrEmpty(sysdicdisplay_e)
				|| Utils.isNullOrEmpty(sysdicremake)) {

			return new JsonResult<Sysdic>(232, "增加字典失败..数值不能为空", null);
		} else {
			Sysdic sysdic = new Sysdic();
			sysdic.setSysdictype(sysdictype);
			sysdic.setSysdicname(sysdicname);
			sysdic.setSysdicvalue(sysdicvalue);
			sysdic.setSysdicdisplay(sysdicdisplay);
			sysdic.setSysdicdisplay_e(sysdicdisplay_e);
			sysdic.setSysdicremake(sysdicremake);
			if (sysdicdao.findBySysdictype2(sysdictype).size() == 0) {
				sysdic.setSysdicord(1);
			} else {
				Integer size = sysdicdao.findBySysdictype2(sysdictype).size();
				sysdic.setSysdicord(size++);
			}
			sysdic.setSysdicisdel((byte) 0);
			sysdicdao.save(sysdic);
			return new JsonResult<Sysdic>(233, "增加字典成功", sysdic);
		}

	}

	// 删除
	@Transactional
	public JsonResult<Sysdic> delectsysdic(Integer sysdicid) {
		if (sysdicid != null) {
			sysdicdao.updateSysdicisdel((byte) 1, sysdicid);
			return new JsonResult<Sysdic>(234, "删除成功", null);
		} else
			return new JsonResult<Sysdic>(235, "删除失败", null);
	}

	// 修改界面
	@Transactional
	public JsonResult<JsonSys> updateviewsysdic(Integer sysdicid) {
		if (sysdicid != null) {
			Sysdic sysdic = sysdicdao.findOne(sysdicid);
			JsonSys jsonSys = new JsonSys();
			CglibBeanCopierUtils.copyProperties(sysdic, jsonSys);
			return new JsonResult<JsonSys>(236, "查单个字典项", jsonSys);
		} else
			return new JsonResult<JsonSys>(237, "查询失败..ID为空", null);
	}

	// 修改
	@Transactional
	public JsonResult<Sysdic> updatesys(Integer sysdicid, String sysdictype, String sysdicname, String sysdicvalue,
			String sysdicdisplay, String sysdicdisplay_e, String sysdicremake) {

		Sysdic sysdic = new Sysdic();
		if (sysdicid == null || Utils.isEmpty(sysdictype) || Utils.isEmpty(sysdicname) || Utils.isEmpty(sysdicvalue)
				|| Utils.isEmpty(sysdicdisplay) || Utils.isEmpty(sysdicdisplay_e) || Utils.isEmpty(sysdicremake)) {
			return new JsonResult<Sysdic>(238, "修改失败..数值不能为空", null);
		} else {
			sysdic.setSysdicid(sysdicid);
			sysdic.setSysdicord(sysdicdao.findOne(sysdicid).getSysdicord());
			sysdic.setSysdicisdel(sysdicdao.findOne(sysdicid).getSysdicisdel());

			// 判断sysdictype
			if (Utils.isNull(sysdictype)) {
				sysdic.setSysdictype(sysdicdao.findOne(sysdicid).getSysdictype());

			} else {
				sysdic.setSysdictype(sysdictype);
			}

			// 判断sysdicname
			if (Utils.isNull(sysdicname)) {
				sysdic.setSysdicname(sysdicdao.findOne(sysdicid).getSysdicname());

			} else {
				sysdic.setSysdicname(sysdicname);
			}

			// 判断sysdicvalue
			if (Utils.isNull(sysdicvalue)) {
				sysdic.setSysdicvalue(sysdicdao.findOne(sysdicid).getSysdicvalue());

			} else {
				sysdic.setSysdicvalue(sysdicvalue);
			}

			// 判断sysdicdisplay
			if (Utils.isNull(sysdicdisplay)) {
				sysdic.setSysdicdisplay(sysdicdao.findOne(sysdicid).getSysdicdisplay());

			} else {
				sysdic.setSysdicdisplay(sysdicdisplay);
			}

			// 判断sysdicdisplay_e
			if (Utils.isNull(sysdicdisplay_e)) {
				sysdic.setSysdicdisplay_e(sysdicdao.findOne(sysdicid).getSysdicdisplay_e());

			} else {
				sysdic.setSysdicdisplay_e(sysdicdisplay_e);
			}

			// 判断sysdicremake
			if (Utils.isNull(sysdicremake)) {
				sysdic.setSysdicremake(sysdicdao.findOne(sysdicid).getSysdicremake());

			} else {
				sysdic.setSysdicremake(sysdicremake);
			}
			
			sysdicdao.save(sysdic);
			return new JsonResult<Sysdic>(239, "修改成功", null);
		}
	}

	// 字典接口
	@Transactional
	public JsonResult<List<JsonSysdic>> listsysdic(String sysdictype, Integer state, String Message,
			String languagecookie) {
		log.info("Sysdic  " + sysdictype);
		List<Sysdic> sysdics = sysdicdao.findBySysdictype(sysdictype);
		List<JsonSysdic> jsonsysdics = new ArrayList<JsonSysdic>();

		if (sysdics.size() != 0) {

			for (int i = 0; i < sysdics.size(); i++) {

				Sysdic sysdic = sysdics.get(i);
				JsonSysdic jsonsysdic = new JsonSysdic();
				jsonsysdic.setSysdicvalue(sysdic.getSysdicvalue());
				// 多语言输出显示
				if (languagecookie.equals("cn")) {
					jsonsysdic.setSysdicname(sysdic.getSysdicdisplay());
				} else if (languagecookie.equals("en")) {
					jsonsysdic.setSysdicname(sysdic.getSysdicdisplay_e());

				}
				jsonsysdics.add(jsonsysdic);
			}
		}

		return new JsonResult<List<JsonSysdic>>(state, Message, jsonsysdics);
	}

	// 操作员 设备类型分类
	@Transactional
	public String gettype(String opetypecookie, String equipmenttype) {

		String type = sysdicdao.findBySysdictypeAndSysdicvalue("100" + opetypecookie, equipmenttype).getSysdicdisplay();

		return type;
	}

	// 查询字典实际含义
	public String finddisplay(String sysdictype, String sysdicvalue, String languagecookie) {

		String sysdicdispaly = null;
		if (languagecookie.equals("cn")) {
			sysdicdispaly = sysdicdao.findBySysdictypeAndSysdicvalue(sysdictype, sysdicvalue).getSysdicdisplay();
		} else if (languagecookie.equals("en")) {
			sysdicdispaly = sysdicdao.findBySysdictypeAndSysdicvalue(sysdictype, sysdicvalue).getSysdicdisplay_e();

		}
		return sysdicdispaly;
	}

}
